#ifndef _OPS_H_
#define _OPS_H_
extern char * XStringCallers [];
enum Functions { QUIT, ADD, SUB, TIMES, DIV, EQUAL, SAME, NOT,
		   SET, QUOTE, EVAL, CAR, CDR, CONS} fn;

#define _FN(x) XStringCallers[fn=x]

#define  CFOPCar \
  {						\
    void * temp = STACKPop();			\
    if (MMGetType(temp) != CFCONS_TYPE)			\
      ERRORThrow("Atempting to car a non cons object");	\
    STACKPush(Car(temp));				\
  }							

#define CFOPCdr \
  {							\
    void * temp = STACKPop();				\
    if (MMGetType(temp) != CFCONS_TYPE)			\
      ERRORThrow("Atempting to cdr a non cons object");	\
    STACKPush(Cdr(temp));				\
  }
int CFOPListLength (void);
void CFOPQuit (CFCaller * caller);
void CFOPAdd  (CFCaller * caller);
void CFOPSub  (CFCaller * caller);
void CFOPMul  (CFCaller * caller);
void CFOPDiv  (CFCaller * caller);
void CFOPEq   (CFCaller * caller);
void CFOPSame (CFCaller * caller);
void CFOPNot (CFCaller * caller);

#endif
